package com.cancer.biz.auth.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.cancer.biz.auth.entity.Permission;
import com.cancer.biz.auth.entity.Role;
import com.cancer.biz.auth.entity.User;
import com.cancer.biz.auth.entity.query.RoleQuery;


public interface RoleDao {
	int countByExample(RoleQuery example);

	int deleteByExample(RoleQuery example);

	int deleteByPrimaryKey(Integer id);

	int insert(Role record);

	int insertSelective(Role record);

	/**
	 * @Company GeekPlus
	 * @Description 维护角色和用户关系表
	 * @param u
	 * @param r
	 * @return
	 * @Author guojianxia
	 * @Date 2016年1月9日 下午5:19:09
	 */
	int relationWithUser(Role r, User u);

	/**
	 * @Company GeekPlus
	 * @Description TODO
	 * @param role
	 * @param permission
	 * @return
	 * @Author guojianxia
	 * @Date 2016年1月6日 下午3:10:22
	 */
	int relationwWithPermission(Role role, Permission permission);

	/**
	 * @Company GeekPlus
	 * @Description 根据角色id查询相应的权限id
	 * @param id
	 *            角色id
	 * @return
	 * @Author guojianxia
	 * @Date 2016年1月6日 下午3:47:59
	 */
	List<Integer> queryPermissionIdsByRoleId(Integer id);

	/**
	 * @Company GeekPlus
	 * @Description 根据角色id查询相应的角色与用户的关系记录
	 * @param id
	 *            角色id
	 * @return
	 * @Author guojianxia
	 * @Date 2016年1月12日 下午4:16:16
	 */
	List<Integer> queryRoleRelationUserByRoleId(Integer id);

	/**
	 * @Company GeekPlus
	 * @Description  根据角色的n个id，查询出对应的权限
	 * @param ids
	 * @return
	 * @Author  guojianxia
	 * @Date    2016年1月16日 上午10:13:55
	 */
	List<Integer> queryPermIdsByRoleIds(List<Integer> ids);
	
	/**
	 * @Company GeekPlus
	 * @Description 根据角色id将角色和权限关系表中与该角色相关的记录全部清除
	 * @param id
	 *            角色id
	 * @return
	 * @Author guojianxia
	 * @Date 2016年1月9日 下午5:03:44
	 */
	int deleteRelationPermission(Integer id);

	/**
	 * @Company GeekPlus
	 * @Description 根据角色id将角色和用户关系表中的该角色相关的记录全部清除,用于操作角色
	 * @param id
	 *            角色id
	 * @return
	 * @Author guojianxia
	 * @Date 2016年1月9日 下午5:23:09
	 */
	int deleteRelationUserByUserId(Integer id);
	
	/**
	 * @Company GeekPlus
	 * @Description  根据角色的id解除角色与用户的关系
	 * @param id
	 * @return
	 * @Author  guojianxia
	 * @Date    2016年1月16日 下午4:18:23
	 */
	int deleteRelationUserByRoleId(Integer id);

	List<Role> selectByExample(RoleQuery example);

	Role selectByPrimaryKey(Integer id);

	int updateByExampleSelective(@Param("record") Role record, @Param("example") RoleQuery example);

	int updateByExample(@Param("record") Role record, @Param("example") RoleQuery example);

	int updateByPrimaryKeySelective(Role record);

	int updateByPrimaryKey(Role record);

}